utils: fix check_pid_path to work with deleted file as well
authorKarel Kočí <[email protected]>
Thu, 2 Jul 2020 10:49:56 +0000 (12:49 +0200)
committerPetr Štetiar <[email protected]>
Sat, 11 Jul 2020 13:01:29 +0000 (15:01 +0200)
commit3d9bd73e8c2d8a1f78effbe92dd2495bbd2552c4
tree2284f7a464cee8d0067ac85bee7fd573f4798a27
parent51e9fb8151e8f2c16ac1400bf4d64147ee7e8f5a
utils: fix check_pid_path to work with deleted file as well

check_pid_patch is checking if process with given PID and executable
path is running. If this code fails the rest of the code can be
convinced that program is no longer running and possibly spawns new
instance that can collide with already running one. This behavior was
reproduced with hostapd.

Symbolic link exe in process subdirectory in /proc points to original
executable. The problem is that it reads as original path plus string
' (deleted)' if file is removed. The process is still running but
original file is no longer available on files system.

This behavior is triggered not only when file is removed (unlinked) but
also when file is replaced. This happens clearly on package update. In
general this happens any time all references (hard links) to file are
removed from file system.

This is not ultimate fix as exe link points to any last reference on
file system with preference for original one. The problem is if there
are multiple references and the original one is removed. This can be
reproduced just by copying executable (hard linking) and unlinking the
original one. In such case exe link would point to copy and not to
original deleted one.

Signed-off-by: Karel Kočí <[email protected]>
utils.c